﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using MultiGed2.Topologie;

namespace MultiGed2.Provoz
{
 /// <summary>
 /// Vycet druhu vlaku pro jizdni doby.
 /// </summary>
 public enum VlDruhJD
 {
  /// <summary>
  /// Jizdni doby pro rychlik.
  /// </summary>
  R,
  /// <summary>
  /// Jizdni doby pro rychlik s naklapenim.
  /// </summary>
  RN,
  /// <summary>
  /// Jizdni doby pro zastavkovy osobak.
  /// </summary>
  Os,
  /// <summary>
  /// Jizdni doby pro naklad.
  /// </summary>
  Nakl,
  /// <summary>
  /// Jizdni doby pro lokomotivu.
  /// </summary>
  Lv
 };

 /// <summary>
 /// Jizdni doby mezi dopravnami.
 /// </summary>
 public class JizdniDoba
 {
  private Dopravna _dopravnaZ;
  /// <summary>
  /// Vychozi dopravna.
  /// </summary>
  public Dopravna dopravnaZ { get { return _dopravnaZ; } }

  private Dopravna _dopravnaDo;
  /// <summary>
  /// Cilova dopravna.
  /// </summary>
  public Dopravna dopravnaDo { get { return _dopravnaDo; } }

  private VlDruhJD _typVlaku;
  /// <summary>
  /// Typ vlaku.
  /// </summary>
  public VlDruhJD typVlaku { get { return _typVlaku; } }

  private Dictionary<Rychlost, byte> _doby;
  /// <summary>
  /// Tabulka jizdnich dob.
  /// </summary>
  public Dictionary<Rychlost, byte> doby { get { return _doby; } }

  /// <summary>
  /// Konstruktor jizdnich dob.
  /// </summary>
  /// <param name="dopravnaZ">Vychozi dopravna.</param>
  /// <param name="dopravnaDo">Cilova dopravna.</param>
  /// <param name="doby">Pole jizdnich dob, 14 polozek
  /// casu v minutach pro rychlosti 160km/h az 30km/h.</param>
  /// <param name="typVlaku">Typ vlaku, pro ktery plati jizdni doby.</param>
  public JizdniDoba(Dopravna dopravnaZ, Dopravna dopravnaDo, byte[] doby, VlDruhJD typVlaku)
  {
   _dopravnaZ = dopravnaZ;
   _dopravnaDo = dopravnaDo;
   _doby = new Dictionary<Rychlost,byte>()
   {
    { Rychlost.V160, doby[0] }, { Rychlost.V150, doby[1] },
    { Rychlost.V140, doby[2] }, { Rychlost.V130, doby[3] },
    { Rychlost.V120, doby[4] }, { Rychlost.V110, doby[5] },
    { Rychlost.V100, doby[6] }, { Rychlost.V90, doby[7] },
    { Rychlost.V80, doby[8] },  { Rychlost.V70, doby[9] },
    { Rychlost.V60, doby[10] }, { Rychlost.V50, doby[11] },
    { Rychlost.V40, doby[12] }, { Rychlost.V30, doby[13] }
   };
   _typVlaku = typVlaku;
  }

  /// <summary>
  /// Najde jizdni dobu pro urcitou rychlost.
  /// </summary>
  /// <param name="rychlost">Vyctova hodnota rychlosti.</param>
  /// <returns>Jizdni doba v minutach.</returns>
  public byte najdiDobu(Rychlost rychlost)
  {
   byte doba = 0;
   if (_doby.Keys.Contains(rychlost))
    doba = _doby[rychlost];
   return doba;
  }
 }
}
